\documentclass[11pt,a4paper]{report}

\usepackage[centerlast]{caption2}
\usepackage{fancybox}
\usepackage{amsfonts}
\usepackage[toc,page,title,titletoc,header]{appendix}
\usepackage{color}
\usepackage{xcolor}
\usepackage{titlesec}
\usepackage{ifthen,calc,lastpage,listings}
\usepackage{amsthm}
\usepackage{latexsym}
\usepackage{amsmath}        % AMSLaTeX
\usepackage{amssymb}        % AMSLaTeX sym-bols
\usepackage{indentfirst}    % indent first line of each paragraph
\usepackage{longtable}      % table that occupies multiple pages
\usepackage{subfigure}      %
\usepackage{slashbox}       %@@表格头画斜线
\usepackage{graphicx}       %@@图象
\usepackage{graphics}       %@@图象
\usepackage{flafter}
\usepackage{pifont}
\usepackage{picinpar}
\usepackage{xeCJK}

\graphicspath{{截图/}}

\renewcommand\thesection{\arabic{section}.~}
\renewcommand\thesubsection{\arabic{section}.\arabic{subsection}~}

\setCJKfamilyfont{akai}{Adobe Kaiti Std}
\newcommand{\akai}[1]{\CJKfamily{akai} #1}
\setCJKfamilyfont{ahei}{Adobe Heiti Std}
\newcommand{\ahei}[1]{\CJKfamily{ahei} #1}
\setCJKfamilyfont{asong}{Adobe Song Std}
\newcommand{\asong}[1]{\CJKfamily{asong} #1}
\setCJKfamilyfont{afsong}{Adobe Fangsong Std}
\newcommand{\afsong}[1]{\CJKfamily{asong} #1}
\setCJKfamilyfont{hei}{SimHei}
\newcommand{\hei}[1]{\CJKfamily{hei} #1}
\setCJKfamilyfont{cyun}{STCaiyun}
\newcommand{\cyun}[1]{\CJKfamily{cyun} #1}
\setCJKfamilyfont{song}{SimSun}
\newcommand{\song}[1]{\CJKfamily{song} #1}
\setCJKfamilyfont{yyuan}{YouYuan}
\newcommand{\yyuan}[1]{\CJKfamily{yyuan} #1}
\setCJKfamilyfont{kai}{KaiTi_GB2312}
\newcommand{\kai}[1]{\CJKfamily{kai} #1}
\setCJKfamilyfont{dkuan}{WenQuanYi Micro Hei Mono}
\newcommand{\dkuan}[1]{\CJKfamily{dkuan} #1}
\setCJKfamilyfont{fangsong}{FangSong_GB2312}
\newcommand{\fsong}[1]{\CJKfamily{fangsong} #1}
\setCJKfamilyfont{xkai}{STXingkai}
\newcommand{\xkai}[1]{\CJKfamily{xkai} #1}
\setCJKfamilyfont{loli}{DFGirl:style=Regular}
\newcommand{\loli}[1]{\CJKfamily{loli} #1}
\setCJKfamilyfont{bsong}{STZhongsong:style=Regular}
\newcommand{\bsong}[1]{\CJKfamily{bsong} #1}

\newcommand{\chuhao}{\fontsize{42pt}{\baselineskip}\selectfont}     % 字号设置
\newcommand{\xiaochuhao}{\fontsize{36pt}{\baselineskip}\selectfont} % 字号设置
\newcommand{\yichu}{\fontsize{32pt}{\baselineskip}\selectfont}      % 字号设置
\newcommand{\yihao}{\fontsize{28pt}{\baselineskip}\selectfont}      % 字号设置
\newcommand{\erhao}{\fontsize{21pt}{\baselineskip}\selectfont}      % 字号设置
\newcommand{\xiaoerhao}{\fontsize{18pt}{\baselineskip}\selectfont}  % 字号设置
\newcommand{\sanhao}{\fontsize{15.75pt}{\baselineskip}\selectfont}  % 字号设置
\newcommand{\sihao}{\fontsize{14pt}{\baselineskip}\selectfont}      % 字号设置
\newcommand{\xiaosihao}{\fontsize{12pt}{\baselineskip}\selectfont}  % 字号设置
\newcommand{\wuhao}{\fontsize{10.5pt}{\baselineskip}\selectfont}    % 字号设置
\newcommand{\xiaowuhao}{\fontsize{9pt}{\baselineskip}\selectfont}   % 字号设置
\newcommand{\liuhao}{\fontsize{7.875pt}{\baselineskip}\selectfont}  % 字号设置
\newcommand{\qihao}{\fontsize{5.25pt}{\baselineskip}\selectfont}    % 字号设置

\setmainfont{Minion Pro}
\setsansfont{Myriad Pro}
\setmonofont{Lucida Sans Typewriter}
\setCJKmainfont[BoldFont=SimHei,ItalicFont=KaiTi_GB2312]{SimSun}

\DeclareSymbolFont{operators}{OT1}{cmtt}{m}{n}
\DeclareMathSizes{10}{10}{7}{5}
\DeclareSymbolFont{symbols}{OMS}{cmex}{m}{n}
\mathversion{bold}
\DeclareMathSizes{13.82}{14.4}{10}{7}

\usepackage{array}
\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\newcolumntype{C}[1]{>{\PreserveBackslash\centering}p{#1}}
\newcolumntype{R}[1]{>{\PreserveBackslash\raggedleft}p{#1}}
\newcolumntype{L}[1]{>{\PreserveBackslash\raggedright}p{#1}}

\usepackage{color}
\usepackage{xcolor}
\definecolor{grey}{rgb}{0.3,0.3,0.3}
\definecolor{darkgreen}{rgb}{0,0.3,0}
\definecolor{darkblue}{rgb}{0,0,0.3}
\definecolor{grey}{rgb}{0.95,0.95,0.95}
\definecolor{darkgreen}{rgb}{0.0,0.5078,0.0}
\definecolor{purple}{rgb}{1,0.12,0.12}
\definecolor{brown}{rgb}{0.545,0.271,0.075}

\renewcommand{\sfdefault}{phv}
\lstset{language=C++}
\lstset{%
         basicstyle=\scriptsize\ttfamily,% Standardschrift
         numbers=left,%               % Ort der Zeilennummern
         numberstyle=\tiny,% 
         %stepnumber=2,
         numbersep=5pt,%
showstringspaces=false,% Leerzeichen in Strings anzeigen ?  
commentstyle=\color{darkgreen}\itshape,%
keywordstyle=\color{blue}\bfseries,
stringstyle=\color{red},%
rulesepcolor=\color{red}\bfseries,%
directivestyle=\color{brown}\bfseries,%
%backgroundcolor=\color{lightgray},%
caption=\lstname,
         extendedchars=true,%         %
         breaklines=true,%            % Zeilen werden Umgebrochen
         columns=flexible,%
         mathescape=fause,%  
%         frame=b,%         
         showspaces=false,%
         tabsize=4,           % Leerzeichen anzeigen ?
         showtabs=false             % Tabs anzeigen ?
}
\lstset{framexleftmargin=17pt,framexrightmargin=5pt,framextopmargin=0pt,framexbottommargin=4pt}
\lstset{xleftmargin=17pt,xrightmargin=5pt}
\renewcommand{\lstlistingname}{源代码}
\lstloadlanguages{C,C++,Java,Matlab,Mathematica,[ANSI]C}

\addtolength{\textwidth}{1in}
\addtolength{\oddsidemargin}{-.5in}
\addtolength{\textheight}{1in}
\addtolength{\topmargin}{-.5in}

%\usepackage{fancyhdr}
%\pagestyle{fancy} \lhead{}
%\chead{实验报告} \rhead{} \lfoot{}
%\cfoot{\thepage}%%% team control number as package option    @@ 修改%队号
%\rfoot{}
%\renewcommand{\headrulewidth}{0.7pt}
\renewcommand{\headheight}{13.6pt}
\renewcommand{\figurename}{\footnotesize{\textbf{截图}}}

\usepackage{graphicx}
\begin{document}

\begin{titlepage}
\rule{0em}{0.6cm}
\begin{center}
\includegraphics[width=8.3cm]{njupt.eps}
\end{center}
\vspace{1cm}
\begin{center}
\textnormal{\bsong\chuhao{实\ \ \ 验\ \ \ 报\ \ \ 告}}\\
\end{center}
\vspace{-0.1cm}
\begin{center}
{\kai\sanhao
\begin{tabular}{lclcclcl}
（&2010& / &2011&学年\ 第& 二 & 学期）\\
\end{tabular}%
}
\end{center}
{\song\sihao
\vspace{2.7cm}
\setlength{\extrarowheight}{0.34cm} 
\begin{center}
\begin{tabular}{cC{3.7cm}cC{1.5cm}cC{1.5cm}c}
      课程名称 & \multicolumn{ 6}{c}{ 智能仪器原理与设计}\\\cline{2-7}
      实验名称 & \multicolumn{6}{c}{I/O口输入输出、矩阵键盘扫描、AD数据采集}\\\cline{2-7}
      实验时间 &    2011 &      年 &         6 &          月 &      26 &          日\\\cline{2-2}\cline{4-4}\cline{6-6}
      指导单位 &                                                   \multicolumn{ 6}{c}{自动化学院}\\\cline{2-7}
      指导老师 &                                                  \multicolumn{ 6}{c}{徐国政}\\\cline{2-7}
\end{tabular}%
\end{center}
\vspace{1.35cm}
\begin{center}
\begin{tabular}{cC{3.2cm}cC{3.9cm}}
      学生姓名 &     张首至  &  班级学号 &    B08050216        \\\cline{2-2}\cline{4-4}
     学院(系) &      自动化 &   专\ \ \ \ \ \ \ \ 业 &    测控技术与仪器\\\cline{2-2}\cline{4-4}
\end{tabular}  
\end{center}
}
\end{titlepage}
\newpage

\begin{center}
\textnormal{\hei\LARGE 一 { }{ } I/O 口输入输出}
\end{center}

\chapter{实验平台:}
%\vspace{-0.3cm}
\begin{enumerate}
\item SL-I型51单片机综合实验箱
\item KEIL C 软件
\end{enumerate}
\section{实验目的:}
掌握单片机(STC12C5A60S2)普通I/O口的控制方法。
\section{实验原理:}
\subsection{I/O口的控制}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.6]{截图/1.png}
\caption{}
\label{}
\end{figure}
控制单片机的I/O就是控制单片机I/O对应的寄存器,如P0口,P0口的地址是0x80h,PO只是用sfr关键字声明的一个别名,操作P0其实就是在操作0x80h地址的寄存器。在作输出时只要向相应的位上写‘0’或‘1’就可以在对应的引脚上输出低电平和高电平。在作输入时,为能正确读入,要先向须读入的I/O口送高电平,当读到是高电平对应就是‘1’,读到低电平对应就是‘0’。
\subsection{I/O输入示例}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.6]{截图/2.png}
\caption{}
\label{}
\end{figure}
如图1-2所示,这是独立按键的常用电路。当键未按下时,由于上拉电阻的原 因,单片机I/O读到高电平;当键按下时,I/O口被拉低,此时单片机读取到低电 平,即完成按键检测。
\section{实验步骤:}
\begin{enumerate}
\item 通过KEIL C 建立一个工程，并将相应的头文件包含进去
\item 按照实例编写相应的代码
\item 将代码烧入，并测试
\end{enumerate}
\lstinputlisting[language=C++]{IO.c}
\section{实验结果:}
看到意料之中的情景，即P2 口的发光二极管被成功控制，自上向下逐个点亮。

\newpage

\begin{center}
\textnormal{\hei\LARGE 二 { }{ } 矩阵键盘应用实验}
\end{center}

\section{实验平台:}
\begin{enumerate}
\item SL-I型51单片机综合实验箱
\item KEIL C 软件
\end{enumerate}
\section{实验目的:}
\begin{enumerate}
\item 掌握独立键盘的使用方法
\item 掌握矩阵键盘的扫描原理
\end{enumerate}
\section{实验原理}
\subsection{独立键盘的应用}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.6]{截图/3.png}
\caption{}
\label{}
\end{figure}
为了正确的读入键盘输入,一般建议如图3-1带上拉电阻的接法。
对键盘的读取有两种方法:
\begin{enumerate}
\item 接到普通I/O口,扫描输入。
\item 接到外部中断,中断输入,实时性能好。(中断触发又有跳变沿触发和电平触发,通过ITx来设置。)
\end{enumerate}
\subsection{矩阵键盘应用}
\begin{figure}[htp]
\centering
\includegraphics[scale=0.6]{截图/4.png}
\caption{}
\label{}
\end{figure}
\begin{enumerate}
\item[扫描法] 如图3-2可以看到上面是一组4*4的矩阵键盘,4行4列。键盘的识别原理是逐行送低电平,同时读取列线,这样就可以识别出是哪个键被按下。P2口对应高到低COL4,COL3,COL2,COL1,ROW4,ROW3,ROW2,ROW1。例如给P2口送0xfe的时候,第一行是低电平,这时读取列线有没有低电平,如没有低电平就让第二行为低,如有低电平再判断是哪一列为低,在一个2维的矩阵中,两个方向上的坐标都有了,便可以唯一的确定是哪个按键被按下。这种方法的缺点是,CPU开销大,实时性不好,如有较多的中断,并且中断服务子程序耗时较多时不宜采用。
\item[中断法] 我们通过逻辑门电路将列线逻辑进行判断,无论是哪个列线变成了低电平都通过逻辑门电路产生低电平,并将这一逻辑输出接至单片机的外部中断。这样就不需要时刻扫描键盘,只须在有中断产生的时候去扫描确定一下按键就可以了。缺点是占用了一个外部中断源,并且需要另加硬件电路。
\end{enumerate}
\section{实验步骤:}
\begin{enumerate}
\item 通过KEIL C 建立一个工程，并将相应的头文件包含进去
\item 按照实例编写相应的代码
\item 将代码烧入，并测试
\end{enumerate}
\lstinputlisting[language=C++]{Keyboard.c}
\section{实验结果:}
当按键S1,S2,S3,S5,S6,S7,S9,S10,S11时,数码管依次显示100,200,300,400,
500,600,700,800,900。当按键S8按下时在数码管上显示数值有递增的效果。
\end{document}